//#include <reg52.h>
#include <stdio.h>
#include <intrins.h>
#include <STC89C5xRC.H>
#include <HX1711.h>

// /****************************************************************************** 
//  * 延时程序 
//  */
// void delay_us(unsigned int us)
// {
//     register unsigned int startVal;
//     register unsigned int endVal;
//     register unsigned int curVal;
//     asm volatile ("mfc0 %0, $9;" : "=&r"(startVal));
//     endVal = startVal + us * (mips_timer_step / 1000);
//     while (1) 
//     {
//         asm volatile ("mfc0 %0, $9;" : "=&r"(curVal));
//         if (((endVal > startVal) && (curVal >= endVal)) ||
//             ((endVal < startVal) && (curVal < startVal) && (curVal >= endVal)))
//             break;
//     }
// }

// /*
//  * 延时 1ms
//  *
//  * TODO 换算 TICKS_PER_SECOND
//  */
// void delay_ms(unsigned int ms)
// {
//     delay_us(ms * 1000);
// }

// 定义LCD1602相关引脚
sbit RS = P1^3;   // RS引脚
sbit RW = P1^4;   // RW引脚
sbit E = P1^5;    // E引脚
sbit DATA = P0;   // 数据线引脚

// LCD1602写命令
void LcdWriteCmd(unsigned char cmd) {
    RS = 0;
    RW = 0;
    DATA = cmd;
    _nop_();
    E = 1;
    _nop_();
    E = 0;
    _nop_();
}

// LCD1602写数据
void LcdWriteData(unsigned char dat) {
    RS = 1;
    RW = 0;
    DATA = dat;
    _nop_();
    E = 1;
    _nop_();
    E = 0;
    _nop_();
}

// /***********************************************
// 函数名称：Delay_ms
// 功    能：STC8系列单片机1ms延时程序
// 入口参数：ms:延时的毫秒数
// 返 回 值：无	
// 备    注：示波器实测：1.01ms，内部时钟：24MHz           
// ************************************************/
void Delay_ms(unsigned int ms)
{
  unsigned int i;
  while( (ms--) != 0)
  {
    for(i = 0; i < 1850; i++); 
  }             
}

/***********************************************
函数名称：LcdInit()
功    能：LCD1602初始化
入口参数：
返 回 值：	
备    注：LcdWriteCmd();函数目测在#include <intrins.h>里面      
************************************************/
void LcdInit() {
    LcdWriteCmd(0x38);   // 设置16x2显示模式
    LcdWriteCmd(0x0c);   // 开启光标并关闭闪烁
    LcdWriteCmd(0x06);   // 光标右移
    LcdWriteCmd(0x01);   // 清除显示
    LcdWriteCmd(0x80);   // 设置显示位置为第一行第一个字符
}